import  store  from '../vuex/store'
import  {  setChannel, setSessionId, setDeviceId, setDeviceName, setClientId, setHeaders, setGeoLocation }  from '../vuex/actions'
import  {  getQueryString, getBrowser }  from '../utils/utils'
// import wx from 'weixin-js-sdk'
// import { weixinApi } from '../api/api'
import { Promise } from 'es6-promise'


const channel = getQueryString().channel || 'browser'
const sessionId = getQueryString().sessionId
channel && setChannel(store, channel)
sessionId && setSessionId(store, sessionId)

if(getQueryString().mode == 'clear'){
    localStorage.clear()
}
const client = {
    initializeAll(callback) {
        this.setInfo(callback)
    },
    setInfo(callback){
        let removeParameter = (str)=> {
            return str.replace(/([&?])sessionId=[^&]*(&)?/g, function(p0, p1, p2) {
                return p1 === '?' || p2 ? p1 : '';
            });
        }
        
        setGeoLocation(store)

        if(!store.state.localInfo.deviceId){
            // console.log(store.state.localInfo.deviceId)
            let deviceId = this.guid()
            setDeviceId(store, deviceId)
        }
        if(!store.state.localInfo.deviceName){
            // console.log(store.state.localInfo.deviceName)
            setDeviceName(store)
        }
        if(sessionId){
            // setSessionId(store, sessionId)
            let link = location.href
            // 匹配sessionId字段并删除
            // let re = /([&?])sessionId=([^&#]*)/;
            link = removeParameter(link)
            // link = link.replace(re,'')
            // console.log(link)
            history.replaceState({page:'reload'},null,link)
        }
        // $.extend($.ajaxSettings, {
        //     headers: {
        //         'packageCode': store.state.localInfo.channel,
        //         'X-Requested-With':'XMLHttpRequest',
        //         'sessionId':store.state.localInfo.sessionId
        //     }
        // })
        // wx.ready(function(res){
        //     console.log(res)

        //     // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
        // });
        // wx.error(function(res){
        //     console.log(res)
        //     // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。

        // });
        // if(getBrowser() == 'WeChat'){
        //     weixinApi.getSignature({
        //         signUrl:location.href.split('#')[0]
        //     })
        //     .then(result => {
        //         // result.debug = true
        //         result.jsApiList = ['onMenuShareTimeline','onMenuShareAppMessage','chooseImage','uploadImage','getLocalImgData']
        //         wx.config(result)
        //     })
        //     .catch(error => {
        //         console.error(error)
        //     })
        // }
        if(!store.state.localInfo.clientId){
            // console.log(store.state.localInfo.clientId)
            setClientId(store)
            .then(result=>{
                callback()
            })
            .catch(error=>{
                console.error(error)
                callback()
            })
            return
        }
        setHeaders(store)
        callback()
    },
    guid(){
        return this.s4() + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' +
            this.s4() + '-' + this.s4() + this.s4() + this.s4();
    },
    s4(){
        return Math.floor((1 + Math.random()) * 0x10000)
          .toString(16)
          .substring(1);
    },
}

export default client